<?php
/*
 * $Id: ModifyEvent.class.php 253 2009-11-30 02:40:16Z takuji.mezawa $
 * 
 * (C) 2009, Mezawa Takuji, EzoGP (http://ezogp.sourceforge.jp/).
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// オブジェクト参照定義
require_once "model/logic/BaseBizlogic.class.php";
//require_once "app/models/dao/GroupUsersDao.class.php";
require_once "app/models/dao/EventDao.class.php";
require_once "app/models/dao/EventUsersDao.class.php";
require_once "app/models/dto/DeliveryMailDto.class.php";
require_once "service/mail/MailSendException.class.php";
require_once "app/common/DeliveryMailBean.class.php";

/**
 * イベント情報を変更するビジネスロジッククラス。
 * 
 * @author     $Author: takuji.mezawa $  (EzoGP)
 * @version    $Revision: 253 $
 * @package    app
 * @subpackage models/logic
 */
class ModifyEvent extends BaseBizlogic {
    private static $log;                    // ロガー
    private static $typename = __CLASS__;   // 自身のクラス名
    
    /**
     * コンストラクタ。
     * 
     * 1. ロガーの生成を行う。
     */
    public function __construct() {
        self::$log =& LoggingObject::getLogger(PTA_LOG_CATEGORY);
    }
    
    /**
     * デストラクタ。
     */
    public function __destruct() {
        self::$log->info(sprintf("%s destructed.", self::$typename));
    }
    
    /**
     * (non-PHPdoc)
     * @see syracava/libs/model/logic/BaseBizlogic#execute($param)
     */
    public function execute(array $param) {
        self::$log->start(__METHOD__);
        
        // データベースに接続する
        $_conn = self::getConnection();
        
        $_expire = sprintf("%d-%d-%d", $param['expYear'], $param['expMonth'], $param['expDay']);
        
        $_res = array();
        try {
            $_evDao =& new EventDao($_conn);            // イベント情報DAOの生成
            $_evDao->startTransaction($_conn);          // トランザクション制御の開始
            $_evDao->update("event_modify", array(
                'expire'  => $_expire,
                'content' => $param['content'],
                'eventId' => $param['eventId']
            ));                                         // イベント情報の更新
            
            $_mailData =& new DeliveryMailDto();
            $_mailData->setAll(array(
                'groupId'    => $param['groupId'],
                'userId'     => $param['userId'],
                'title'      => $param['eventName'],
                'subTitle'   => Message::getMessage("lbl.pta.event_update"),
                'content'    => $param['content'],
                'expiredate' => $_expire
            ));
            $_delivery =& new DeliveryMailBean($_conn);
            $_delivery->sendmail($_mailData);           // 所属会員全員にメールを配信する
            
            $_evDao->commitTransaction($_conn);         // イベント情報更新・確定（コミット）
            
            $_res['status']  = 0;
            $_res['message'] = Message::getMessage("info.pta.possibled_event-update", array($param['eventId']));
            
            self::$log->info(sprintf("%s(commit): eventId=%d modified.", __METHOD__, $param['eventId']));
            
        } catch (DataAccessException $dberr) {
            $_evDao->endTransaction($_conn);            // イベント情報更新・無効（ロールバック）
            CommonUtils::errorProcess(self::$log, $_res, array(
                'typename'  => __METHOD__,
                'exception' => $dberr,
                'errorId'   => "error.pta.impossibled_event-update"
            ), array($dberr->getCode()));
            
        } catch (MailSendException $senderr) {
            $_evDao->endTransaction($_conn);            // イベント情報更新・無効（ロールバック）
            CommonUtils::errorProcess(self::$log, $_res, array(
                'typename'  => __METHOD__,
                'exception' => $senderr,
                'errorId'   => "error.pta.impossibled_event-update"
            ), array($senderr->getCode()));
        }
        
        // データベースから切り離す
        self::disconnect($_conn);
        
        self::$log->finish(__METHOD__);
        
        return $_res;
    }
}
?>